package com.ck.load;

import com.ck.load.handle.MsgHandle;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

/**
 * @author ck
 * @date 2024/2/22 11:15
 * desc:手动实现java 热加载

 * 实现思路：Java 程序在运行的时候，首先会把 class 类文件加载到 JVM 中，而类的加载过程又有五个阶段(加载、验证、准备、解析、初始化,)，五个阶段中只有加载阶段用户可以进行自定义处理，所以我们如果能在程序代码更改且重新编译后，让运行的进程可以实时获取到新编译后的 class 文件，然后重新进行加载的话，那么理论上就可以实现一个简单的 Java 热加载
 *
 * 实现步骤：
 * 1、实现自己的类加载器。
 * 2、从自己的类加载器中加载要热加载的类。
 * 3、不断轮询要热加载的类 class 文件是否有更新。
 * 4、如果有更新，重新加载。
 */
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class HotLoadingDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(HotLoadingDemoApplication.class, args);
        new Thread(new MsgHandle()).start();
    }
}
